package sucre

class EspecialidadController {

    def loginService
    def beforeInterceptor = [action:this.&auth]
    def auth = {
        def result =loginService.validarAcceso(
            session["seguridad_usuario"],
            session["seguridad_funcionesHabilitadas"],
            controllerName,actionName,request.getRemoteAddr().toString())
        if(!result) {
            redirect(controller:"login",action:"auth",params:['acceso':false])
            return false
        }
    }
    def index = {}
    // the delete, save and update actions only accept POST requests
    static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def parametersService
    def list = {
        params.max = parametersService.getInt("paginacion.maxRegPagina")
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)

        def query={
            if(params.searchField){
                ilike('nombre','%'+params.searchField+'%')
            }
        }
        def especialidadList = Especialidad.createCriteria().list(params,query)
        [ especialidadInstanceList:  especialidadList,
            especialidadInstanceTotal: especialidadList.getTotalCount()]
    }
    def create = {
        def listaA = Turno.list()
        def listaB =[]
        
        
        def especialidadInstance = new Especialidad()
        especialidadInstance.properties = params
        if(params.eOc=='edit'){
            especialidadInstance = Especialidad.findById(params.id)
            especialidadInstance.turnos.each {
                listaA.remove(it)   
            }
            listaB=especialidadInstance.turnos
        }else{
            flash.message=''
            params.eOc='create'
        }
        return [especialidadInstance:especialidadInstance,eOc:params.eOc, listaA:listaA, listaB:listaB]
    }
    def save = {
        def listaErrores=[]
        println  "------------------params esp: " + params
        def especialidadInstance = new Especialidad(params)
        if(params.eOc=='edit'){
            println "params.id: " + params.id 
            especialidadInstance=Especialidad.get(params.id)
            especialidadInstance.properties=params
        }
        println "------------los turnos en la clase: " + especialidadInstance.turnos
        def cadena = params.turnos_SB
        if(cadena != "" && cadena != " " && !cadena.contains(",")){
            println "--------no tiene coma agrego: "
            especialidadInstance.addToTurnos(Turno.get(cadena))
        } else if(cadena.contains(",")){
            cadena = params.turnos_SB.split(",")
            cadena.each { turno ->
                println "----------tiene coma agrego: " + turno
                especialidadInstance.addToTurnos(Turno.get(turno))
            }
        } else {
            println ".......remuevo"
            if (especialidadInstance.turnos != null) {
                especialidadInstance.turnos.clear() 
            }
        }
        Especialidad.withTransaction{ status ->
            try{
                if(!especialidadInstance.hasErrors() && especialidadInstance.save(flush:true)) {

                    if(params.eOc=='create'){
                        // def.especialidad.creado
                        flash.message=message(code:'def.registro.creado',
                            args:[especialidadInstance])
                    }else{
                        //def.especialidad.actualizado
                        flash.message=message(code:'def.registro.actualizado',
                            args:[especialidadInstance])
                    }
                        
                    if(params.eOc=='create'){
                        params.eOc='edit'
                    }
                }
            }catch(Exception e){
                println e
                listaErrores.add(message(code:'def.registro.error.Creando'))
                status.setRollbackOnly()
            }
        }
        def listaA = Turno.list()
        def listaB =[]
        especialidadInstance.turnos.each {
            listaA.remove(it)   
        }
        listaB=especialidadInstance.turnos
        render(view:'create',model:[especialidadInstance:especialidadInstance,
                eOc:params.eOc,upd:'si',listaErrores:listaErrores, listaA:listaA, listaB:listaB])
    }
    def search={
        redirect(action:list,params:[searchField:params.searchField])
    }
    def delete = {
        def listaErrores=[]
        def especialidadInstance = Especialidad.get(params.id)
        flash.message=message(code:'def.noeliminado', args:[especialidadInstance])
        render(view:'create',model:[especialidadInstance:new Especialidad(),upd:'si',
                listaErrores:listaErrores])
    }
}
